using System;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;
using EYDIngenieria.ERP.ObjetosDeNegocio.Repositorio;

namespace EYDIngenieria.ERP.Aplicacion.Gestion
{
    public class GestionCotizacion
    {
        private RepositorioCotizacion repositorioCotizacion = new RepositorioCotizacion();
        private RepositorioDetalleCotizacion repositorioDetalleOrdeDeCompra = new RepositorioDetalleCotizacion();
        private MantenedorEstadoCotizacion mantenedorEstadoCotizacion = new MantenedorEstadoCotizacion();
        private GestionFactura gestionFactura = new GestionFactura();

        public Cotizacion GuardarCotizacion(Cotizacion f)
        {
            Cotizacion cotizacion = new Cotizacion();
            cotizacion.Fecha = f.Fecha;
            cotizacion.MontoTotal = f.MontoTotal;
            //Cotizacion.NumeroCotizacion = f.NumeroCotizacion;
            cotizacion.NumeroCotizacion = f.Id;
            cotizacion.Proveedor = f.Proveedor;
            cotizacion.EstadoCotizacion = mantenedorEstadoCotizacion.Buscar("C")[0];
            repositorioCotizacion.Agregar(cotizacion);
            foreach (DetalleCotizacion d in f.Detalle)
            {
                d.Cotizacion = cotizacion;
                d.Fecha = cotizacion.Fecha;
                repositorioDetalleOrdeDeCompra.Agregar(d);
                cotizacion.MontoTotal = cotizacion.MontoTotal + (d.ValorTotal);
            }
            repositorioCotizacion.Modificar(cotizacion);
            return cotizacion;
       }
        public void ActualizaMontoTotal(Cotizacion o)
        {
            foreach (DetalleCotizacion d in o.Detalle)
            {
                o.MontoTotal = o.MontoTotal + (d.ValorTotal);
            }
            repositorioCotizacion.Modificar(o);
        }

        public Cotizacion[] Listar()
        {
            return repositorioCotizacion.Listar();
        }

        public Cotizacion[] Listar(EstadoCotizacion eoc)
        {
            return repositorioCotizacion.Listar(eoc);
        }

        public void Modificar(Cotizacion oc)
        {

            foreach (DetalleCotizacion doc in oc.Detalle)
            {
                if (doc.Id ==0)
                {
                    doc.Fecha = DateTime.Now;
                    repositorioDetalleOrdeDeCompra.Agregar(doc);
                }
                    
               
            }
            repositorioCotizacion.Modificar(oc);
        }

        public Cotizacion Obtener(int id)
        {
            return repositorioCotizacion.Obtener(id);
        }

        public void Facturar(Cotizacion oc,int numeroFactura)
        {
            Factura f = new Factura();
            f.Fecha = DateTime.Now;
            f.NumeroFactura = numeroFactura;
            f.Proveedor = oc.Proveedor;
            DetalleFactura df;
            foreach (DetalleCotizacion doc in oc.Detalle)
            {

                df = new DetalleFactura();
                df.Cantidad = doc.Cantidad;
                df.Producto = doc.Producto;
                df.ValorUnitario = doc.ValorUnitario;
                df.ValorTotal = doc.ValorTotal;
                f.Detalle.Add(df);
            }
            oc.Factura = gestionFactura.GuardarFactura(f);
            Modificar(oc);
        }

        public void Eliminar(Cotizacion oc)
        {
            foreach (DetalleCotizacion d in oc.Detalle)
            {
                repositorioDetalleOrdeDeCompra.Eliminar(d);
            }
            repositorioCotizacion.Eliminar(oc);
        }
    }
}
